package com.zpark.se.lambda;

/**
 * 2、Lambda 表达式可以访问所在外层作用域定义的变量，包括成员变量和局部变量。
 */
public class Demo03 {
    // 成员变量
    private int num1 = 10;
    // 静态变量
    private static int num2 = 20;
    // 定义成员常量
    private final int num3 = 30;
    // 定义静态常量
    private static final int num4 = 40;

    public static void main(String[] args) {
        // 创建当前类对象
        Demo03 d3 = new Demo03();
        // 定义局部变量
        int num5 = 50;
        // 创建匿名内部类对象
        IStudentDao isd = new IStudentDao() {
            @Override
            public int max(int a, int b) {
                return 0;
            }
        };

        // 将上述匿名内部类对象修改为lambda表达式
        IStudentDao isd1 = (a, b) -> {
            // 访问局部变量
            System.out.println(num5);
            // 注：在lambda表达式当中访问局部变量时，不可改变局部变量的值
            // num5 ++; 编译错误
            // 访问成员变量
            System.out.println(d3.num1);
            // 访问静态变量
            System.out.println(num2);
            // 访问常量
            System.out.println(d3.num3);
            System.out.println(num4);
            return 0;
        };

        isd1.max(12, 32);
    }

}
